package test.java.InterfaceTest.tinShell.bootBatchFilePLETL;

import ME.VPC.M.app.App_X;
import M_V.MPI.xls.commonXLS.MakeContainerXLS;
import OPE.OVU.MVU.OVU.PQE.nodeEdit.LinkNode;
import OPE.PSQ.OEU.SOI.SMQ.neroCell.BootNeroCell;
import OSI.OPE.OEI.PVI.SOI.SMQ.load.File_X_Load;
import S_A.SVQ.stable.S_Annotation;
import S_A.pheromone.IMV_SQI;
import S_I.OSI.PEI.PCI.PSI.tinShell.TinMap;
import exception.thread.DetaThread;

import org.junit.jupiter.api.Test;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;

/*
 * 个人著作权人, 作者 罗瑶光, 浏阳
 * yaoguangluo@outlook.com, 313699483@qq.com, 2080315360@qq.com,
 * (lyg.tin@gmail.com2018年回国后因国内G网屏蔽不再使用）
 * 15116110525-浏阳德塔软件开发有限公司-创始人-法人-总经理-永久非盈利-
 * 430181198505250014, G24402609, EB0581342
 * 204925063, 389418686, F2406501, 0626136
 * 湖南省 浏阳市 集里街道 神仙坳社区 大塘冲一段路 208号 阳光家园别墅小区 第十栋别墅 第三层
 * */
class Sample_X_I_MapAddPluginTest {
	public static void main(String[] argv)
		throws InterruptedException, IOException {
		Sample_X_I_MapAddPluginTest sample_X_I_MapAddPluginTest 
		= new Sample_X_I_MapAddPluginTest();
		sample_X_I_MapAddPluginTest._E();
	}

	/*
	 * 这是一个 tinshell 批处理测试XSLX文件 一键执行复杂条件的ETL节点流拆分搜索语句逻辑， 测试main
	 * 函数demo的test版本，在导入了api之后进行系统集成，然后用下面的对应的函数中源码逻辑进行复制粘贴到
	 * 工程中，直接运行，即可出结果，源码的逻辑按照输入准备计算的参数，然后执行，然后获取输出需要的结果，
	 * 可以用断点来查看数据，也可以用println来显示输出，方便集成，对程序员友好。系统需要jdk1.8 以上的
	 * java环境，本人会把测试的输入输出都注释在这个文件里。及其傻瓜化的流程，方便商业化落地。 --罗瑶光
	 */
	@SuppressWarnings({ "rawtypes" })
	@Test
	void _E() throws InterruptedException, IOException {
		// 初始化
		App_X NE = new App_X();
		// 设置数据库ini文件地址
		// NE.app_S.dbConfigPath="/Users/luoyaoguang430181198505250014/eclipse-workspace
		/// TRIF_DNA/DetaDB/DBconfig.lyg";
		// 配置 模式为无弹窗
		NE.tempString = "去弹窗组件流测试";
		// 启动
		NE.init(NE);
		DetaThread.sleepDeta(100);
		NE.start();
		// 配置环境支持
		while (null == NE.app_S.studyVerbalMap) {
			Thread.sleep(500);
		}
		// 读需要测试的表
		// 配置读XLS的表头配置
		NE.app_S.appConfig.SectionJPanel.xlsWithSpec.setSelected(
			true);
		// 开始模拟读xls的函数逻辑测试
		try {
			if (null == NE.app_S._A) {
				return;
			} // later normalization
			MakeContainerXLS makeContainerXLS = new MakeContainerXLS(
				NE.app_S._A, NE.app_S, NE.app_S.jTabbedpane,
				NE.app_S.tabNames,
				NE.app_S.fMHMMListOneTime_E_X_S.posCnToCn,
				NE.app_S.fMHMMListOneTime_E_X_S.posEnToEn,
				NE.app_S.fMHMMListOneTime_E_X_S.enToCn,
				NE.app_S.fMHMMListOneTime_E_X_S.fullCnToEn, "xls",
				NE.app_S.emotionSample, NE.app_S.ratioMap_E,
				NE.app_S.sensingTest, NE);
			// 临时设置用，之后结构优化后进行去除。
			// 确定测试文件名为药食同源的表文件，tinshell函数执行这个表的操作计算。
			NE._I_U.tempString = "/Users/luoyaoguang430181198505250014/Desktop"
				+ "/YLJHRJ/project/TinOS/DetaResources/books/xlsx/zybgPage"
				+ ".xlsx";
			makeContainerXLS.start();
			while (null == makeContainerXLS.jpanelSecond) {
				Thread.sleep(100);
			}
			while (null == makeContainerXLS.jpanelSecond.pageName) {
				Thread.sleep(100);
			}
			NE.app_S.makeContainerXLSList.add(makeContainerXLS);
			if (makeContainerXLS.tabNames.size() < 1) {
				S_logger.Log.logger.info("" + "error read table");
				NE.stop();
				return;
			}
			String XLSTableName = makeContainerXLS.jpanelSecond.pageName;
			String XLSTableNamePath = makeContainerXLS.jpanelSecond.xlsFilePath;
			S_logger.Log.logger.info("" + "path table:" + XLSTableName);
			S_logger.Log.logger.info("" + "name table:" + XLSTableNamePath);
			// init test
			// 模式1 需要界面配置好PLETL的命令然后保存，之后执行这个保存文件 去弹窗输出即可
			// 物理形式加密文，非古拉丁语语义加密
			// 模式2 类似ShellJPanelTest例子进行拆分TinMap的人类shell和花语言命令计算输出。
			// 模式1计算//一键导入文件
			// --文件位置-package
			// test.java.InterfaceTest.tinShell.bootBatchFilePLETL;
			// --tinshell OSGI插件密文-tinshellExample.etl --加密方式-普通物理加密方式。
			// --tinshell OSGI插件密钥-tinshellExample.etl.dna
			// --加密方式-普通物理加密方式。
			// --package OSI.OPE.gui; --line page 151
			NE._I_U.gUISample.fileCurrentpath = "/Users/luoyaoguang430181198505250014"
				+ "/eclipse-workspace/TRIF_DNA/src/test/java/InterfaceTest"
				+ "/tinShell/bootBatchFilePLETL/tinshellExample.etl";
			File file = new File(NE._I_U.gUISample.fileCurrentpath);
			if (!file.isFile()) {
				S_logger.Log.logger.info("" + S_Annotation.ATTENSION_RECHOICE);
				return;
			}
			LinkNode needDeleteNode = NE._I_U.gUISample.first.first;
			while (needDeleteNode != null) {
				NE._I_U.gUISample.first.first = NE._I_U.gUISample.first
					.deletNode(NE._I_U.gUISample.first.first,
						needDeleteNode.name, needDeleteNode.ID,
						needDeleteNode.primaryKey);
				if (null == needDeleteNode.next) {
					break;
				}
				needDeleteNode = needDeleteNode.next;
			}
			//			if(null==NE._I_U.gUISample.canvas) {
			//				NE._I_U.gUISample.canvas = new ThisCanvas();
			//			}
			// NE._I_U.gUISample.canvas.repaint(); // 稍后hook 进行 异常修整
			// 20230218
			NE._I_U.gUISample.first.first = File_X_Load._E(
				NE._I_U.gUISample.first.first,
				NE._I_U.gUISample.nodeView, file,
				NE._I_U.gUISample.first, NE);
			NE._I_U.gUISample.canvas.repaint();
			NE._I_U.gUISample.righttopScrollPane.validate();
			// 替换 ETL 例子文件中的XLS String
			// 问题-文件名是临时的，我导表后是新的，etl文件中又加了密，所以需要如下解密再replace掉。
			NE.tempString += "去弹窗组件流测试--" + XLSTableName;
			String string = NE._I_U.gUISample.first.first.thisFace.nodeConfiguration;
			string = string.replaceAll("临时XLS1753745165960",
				XLSTableName);
			NE._I_U.gUISample.first.first.thisFace.nodeConfiguration = string;
			// 一键执行文件
			BootNeroCell.bootCell(NE._I_U.gUISample.first.first,
				NE._I_U.gUISample.rightBotJTextPane,
				NE._I_U.gUISample.canvas, NE);
			NE._I_U.gUISample.rightBotJTextPane.setText(
				S_Annotation.NODE_EXEC_SUCCESS);
			NE._I_U.gUISample.rightBotJTextPane.validate();
			// 输出, 高级用法注意循环哟，罗瑶光只举出简单例子。
			LinkNode linkNode = NE._I_U.gUISample.first.first.clone();
			while (null != linkNode) {
				// 这函数是我在用eclipse在联想电脑上创作的，一把个人著作权很正常，因为实名发票
				// 的联想电脑GPRS乱飘，后换上海组装地实名发票指纹苹果电脑serial-FVFJCDL0Q6LC-
				// 上海马吉路88号产地的货，浏阳天虹苹果店买的金色笔记本。自从我2010年后就再没去
				// 过上海了。--罗瑶光2010年后任何上海同事我都没有再见过面，我以后会浏阳出门时候
				// 会注意下各类橡胶头套装扮的社会人尾随卡点猫腻。
				S_logger.Log.logger.info("" + "执行->"
					+ linkNode.thisFace.nodeConfiguration);
				TinMap tinMap = linkNode.thisFace._SQ__OVQ_OSQ_VSQ.outputOut;
				TinMap tinShell = (TinMap) tinMap.get("TinShellETL");
				ArrayList arrayList = (ArrayList) tinShell.get("obj");
				int times = 0;
				for (Object object : arrayList) {
					IMV_SQI _IMV_SQI = (IMV_SQI) object;
					Object _object = _IMV_SQI.get("rowValue");
					IMV_SQI _IMV_SQI_ = (IMV_SQI) _object;
					if (times++ < 1) {
						S_logger.Log.logger.info("" + "列数->" + _IMV_SQI_.size());
					}
					Object _object_ = _IMV_SQI_.get("中药名称");
					IMV_SQI __IMV_SQI_ = (IMV_SQI) _object_;
					//later..trif
					S_logger.Log.logger.info("" + __IMV_SQI_.get("culumnValue"));
				}
				linkNode = linkNode.next;
			}
			// 结束
			NE.stop();

		} catch (InterruptedException e) {
			throw new RuntimeException(e);
		}
	}
}
/*
 * //输出-注意测试XLS文件是一个纯文字表格文件，不要有图片和特殊符号。 //tinshel花语拆开封装
 * 入2个节点的 ETL存档执行，输出都正确如下
 * 执行->首先获取一个表，名字是临时XLS1753753458245，如果有这个表，准备下一步选择;条件为:和
 * :功效|DNN搜索|功效|菜谱|4;条件为:和:中药名称|包含|菜谱;条件为:和:风险规避|不包含|孕;条件为
 * :和:性味|不包含|凉;条件为:和:性味|不包含|咸; 列数->16 虾菜谱 鲢鱼菜谱 鳝鱼菜谱 鲂鱼菜谱
 * 马铃薯菜谱 山羊蹄菜谱 鳅鱼菜谱 食物咖喱菜谱 西红柿菜谱 鸡鸭鸽子鹌鹑蛋菜谱
 * 执行->获取列名:中药名称:打分:功效;在输出的数据表中仅展示列名 为中药名称，打分和功效列这三个即可;
 * 操作:0|行至|30;操作:中药名称|颜色标记为|红色; 列数->3 <div
 * style="background:black"> <fontcolor="red"><div
 * style="background:black"> <font color="red"><div
 * style="background:black"><font color="red"> <div
 * style="background:black"><font color="red"><div
 * style="background:black"> <font color="red"><div
 * style="background:black"><font color="red"> <div
 * style="background:black"><font color="red"><div
 * style="background:black"> <font color="red"><div
 * style="background:black"><font color="red"> <div
 * style="background:black"><font
 * color="red">虾菜谱</font></div></font></div>
 * </font></div></font></div></font></div></font></div></
 * font></div></font></ div> </font></div></font></div> <div
 * style="background:black"><font color="red"><div
 * style="background:black"> <font color="red"><div
 * style="background:black"><font color="red"> <div
 * style="background:black"><font color="red"><div
 * style="background:black"> <font color="red"><div
 * style="background:black"><font color="red"> <div
 * style="background:black"><font color="red"><div
 * style="background:black"> <font color="red"><div
 * style="background:black"><font color="red"> <div
 * style="background:black"><font
 * color="red">鲢鱼菜谱</font></div></font></div>
 * </font></div></font></div></font></div></font></div></
 * font></div></font></ div> </font></div></font></div> <div
 * style="background:black"><font color="red"><div
 * style="background:black"> <font color="red"><div
 * style="background:black"><font color="red"> <div
 * style="background:black"><font color="red"><div
 * style="background:black"> <font color="red"><div
 * style="background:black"><font color="red"> <div
 * style="background:black"><font color="red"><div
 * style="background:black"> <font color="red"><div
 * style="background:black"><font color="red"> <div
 * style="background:black"><font
 * color="red">鳝鱼菜谱</font></div></font></div>
 * </font></div></font></div></font></div></font></div></
 * font></div></font></ div> </font></div></font></div> <div
 * style="background:black"><font color="red"><div
 * style="background:black"> <font color="red"><div
 * style="background:black"><font color="red"> <div
 * style="background:black"><font color="red"><div
 * style="background:black"> <font color="red"><div
 * style="background:black"><font color="red"> <div
 * style="background:black"><font color="red"><div
 * style="background:black"> <font color="red"><div
 * style="background:black"><font color="red"> <div
 * style="background:black"><font
 * color="red">鲂鱼菜谱</font></div></font></div>
 * </font></div></font></div></font></div></font></div></
 * font></div></font></ div> </font></div></font></div> <div
 * style="background:black"><font color="red"><div
 * style="background:black"> <font color="red"><div
 * style="background:black"><font color="red"> <div
 * style="background:black"><font color="red"><div
 * style="background:black"> <font color="red"><div
 * style="background:black"><font color="red"> <div
 * style="background:black"><font color="red"><div
 * style="background:black"> <font color="red"><div
 * style="background:black"><font color="red"> <div
 * style="background:black"><font
 * color="red">马铃薯菜谱</font></div></font>
 * </div></font></div></font></div></font></div></font></div
 * ></font></div></ font> </div></font></div></font></div>
 * <div style="background:black"><font color="red"><div
 * style="background:black"> <font color="red"><div
 * style="background:black"><font color="red"> <div
 * style="background:black"><font color="red"><div
 * style="background:black"> <font color="red"><div
 * style="background:black"><font color="red"> <div
 * style="background:black"><font color="red"><div
 * style="background:black"> <font color="red"><div
 * style="background:black"><font color="red"> <div
 * style="background:black"><font
 * color="red">山羊蹄菜谱</font></div></font>
 * </div></font></div></font></div></font></div></font></div
 * ></font></div></ font> </div></font></div></font></div>
 * <div style="background:black"><font color="red"><div
 * style="background:black"> <font color="red"><div
 * style="background:black"><font color="red"> <div
 * style="background:black"><font color="red"><div
 * style="background:black"> <font color="red"><div
 * style="background:black"><font color="red"> <div
 * style="background:black"><font color="red"><div
 * style="background:black"> <font color="red"><div
 * style="background:black"><font color="red"> <div
 * style="background:black"><font
 * color="red">鳅鱼菜谱</font></div></font></div>
 * </font></div></font></div></font></div></font></div></
 * font></div></font></ div> </font></div></font></div> <div
 * style="background:black"><font color="red"><div
 * style="background:black"> <font color="red"><div
 * style="background:black"><font color="red"> <div
 * style="background:black"><font color="red"><div
 * style="background:black"> <font color="red"><div
 * style="background:black"><font color="red"> <div
 * style="background:black"><font color="red"><div
 * style="background:black"> <font color="red"><div
 * style="background:black"><font color="red"> <div
 * style="background:black"><font
 * color="red">食物咖喱菜谱</font></div></font>
 * </div></font></div></font></div></font></div></font></div
 * ></font></div></ font> </div></font></div></font></div>
 * <div style="background:black"><font color="red"><div
 * style="background:black"> <font color="red"><div
 * style="background:black"><font color="red"> <div
 * style="background:black"><font color="red"><div
 * style="background:black"> <font color="red"><div
 * style="background:black"><font color="red"> <div
 * style="background:black"><font color="red"><div
 * style="background:black"> <font color="red"><div
 * style="background:black"><font color="red"> <div
 * style="background:black"><font
 * color="red">西红柿菜谱</font></div></font>
 * </div></font></div></font></div></font></div></font></div
 * ></font></div></ font> </div></font></div></font></div>
 * <div style="background:black"><font color="red"><div
 * style="background:black"> <font color="red"><div
 * style="background:black"><font color="red"> <div
 * style="background:black"><font color="red"><div
 * style="background:black"> <font color="red"><div
 * style="background:black"><font color="red"> <div
 * style="background:black"><font color="red"><div
 * style="background:black"> <font color="red"><div
 * style="background:black"><font color="red"> <div
 * style="background:black"><font
 * color="red">鸡鸭鸽子鹌鹑蛋菜谱</font></div>
 * </font></div></font></div></font></div></font></div></
 * font></div></font></ div>
 * </font></div></font></div></font></div>
 */